home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / vdl020d.zip / CLUSTLIB.DOC < prev    next >
Text File  |  1993-04-14  |  6KB  |  196 lines

  1. {$R-,S-,V-,I-,A-,D+}
  2. Unit ClustLib;
  3.  
  4. {-------------------------------------------------------------------------}
  5. {                       Unit ClustLib                                     }
  6. {-------------------------------------------------------------------------}
  7. { PURPOSE: Provides basic DOS disk access as well as file operations.     }
  8. { SOURCE: Steve Lewis                                                     }
  9. {-------------------------------------------------------------------------}
  10.  
  11.  
  12. USES
  13.  
  14.     VCrt,
  15.     VGen,
  16.     VCDPLIB,
  17.     VSDLPLow,
  18.     VWinlow,
  19.     VWinhigh;
  20.  
  21. TYPE
  22.     BPBType = RECORD
  23.       BytesPerSector    : WORD;
  24.       SectorsPerCluster : BYTE;
  25.       Reserved          : WORD;
  26.       FATs              : BYTE;
  27.       RootDirEntries    : WORD;
  28.       Sectors           : WORD;
  29.       MediaDescriptors  : BYTE;
  30.       SectorsPerFAT     : WORD;
  31.       SectorsPerTrack   : WORD;
  32.       Heads             : WORD;
  33.       Hidden            : LONGINT;
  34.       BigTotalSectors   : LONGINT;
  35.     END;
  36.  
  37.     FDiskTypePtr = ^FDiskType;
  38.  
  39.     ExtraFDiskInfo = RECORD
  40.       Case BYTE of
  41.         5 : ( RealID     : BYTE;
  42.               StartBlock : LONGINT;
  43.               NumBlocks  : LONGINT;
  44.               Offset     : LONGINT;
  45.               NextPar    : FDiskTypePtr );
  46.  
  47.         1,2,4,6,92,99,100 : ( Reserved : ARRAY[1..17] of BYTE )
  48.     END;
  49.  
  50.     FDiskType = RECORD
  51.       BootBlock  : LONGINT;
  52.       NumBlocks  : LONGINT;
  53.       Offset     : LONGINT;
  54.       Active     : BYTE;
  55.       BPB        : BPBType;
  56.       ID         : BYTE;
  57.       B          : ExtraFDiskInfo;
  58.       WhichOne   : BYTE;
  59.     END;
  60.  
  61.     SDLPParType = RECORD
  62.       StartBlock : LONGINT;
  63.       NumFDisks  : BYTE;
  64.       FDisks     : ARRAY[1..4] of FDiskType;
  65.     END;
  66.  
  67.     SDLPParTypeArray = ARRAY[1..1] of SDLPParType;
  68.  
  69.     MainParType = RECORD
  70.       UnitNum     : BYTE;
  71.       NumDOSPars  : BYTE;
  72.       SDLP        : BOOLEAN;
  73.       DOSPars     : ^SDLPParTypeArray;
  74.     END;
  75.  
  76.     {---------------------------}
  77.  
  78.     DirEntryType = RECORD
  79.       Name         : ARRAY[0..10] of CHAR;
  80.       Attr         : BYTE;
  81.       Reserved     : ARRAY[0..9] of BYTE;
  82.       Time         : WORD;
  83.       Date         : WORD;
  84.       StartCluster : WORD;
  85.       Size         : LONGINT;
  86.     END;
  87.  
  88.     DirEntryArray = ARRAY[0..511] of DirEntryType;
  89.  
  90.     {--------------------------------------------------------------}
  91.     { The two fat types are for 12 and 16-Bit FATs, respectively.  }
  92.     { The 16-bit FAT canbe 128K, thus I have made a structure that }
  93.     { is 32K and have an array of [1..4] of it.  The 12-Bit FAT    }
  94.     { can only ever be 40K or so, thus I have made 56K for ease.   }
  95.     {--------------------------------------------------------------}
  96.  
  97.     FATType16 = ARRAY[0..16383] of WORD;
  98.  
  99.     FatType12 = ARRAY[0..57343] of BYTE;
  100.  
  101.     SearchType = RECORD
  102.       Name : STRING[12];
  103.       Attr : BYTE;
  104.       Size : LONGINT;
  105.     END;
  106.  
  107.     {---------------------------}
  108.  
  109. Procedure ReadFDiskBootSector(     ParUnitNum : BYTE;
  110.                                    First      : BOOLEAN;
  111.                                var FDisk      : FDiskType );
  112.  
  113. Procedure ReadFDiskSectors( ParUnitNum : BYTE;
  114.                             ParNum     : BYTE;
  115.                             SDLPParNum : BYTE  );
  116.  
  117. Procedure ReadSDLPBootSector( UnitNum : BYTE );
  118.  
  119. Procedure DisposeDOSPars;
  120.  
  121. Procedure ScanSystem;
  122.  
  123. Procedure LoadFatTable( LocalUnitNum : BYTE;
  124.                         BPB          : BPBType;
  125.                         BootBlock    : LONGINT  );
  126.  
  127. Procedure LoadDirTable( ClusterNum : LONGINT );
  128.  
  129. Procedure FindNext( var Search : SearchType );
  130.  
  131. Procedure FindFirst( var Search : SearchType );
  132.  
  133. Procedure ChangeDir( S : STRING );
  134.  
  135.     {---------------------------}
  136.  
  137. VAR
  138.    Pars           : ARRAY[0..63] of MainParType;
  139.    NumPars        : BYTE;
  140.    UnitNum        : BYTE;
  141.    ClusterSize    : LONGINT;
  142.    FatSize        : WORD;
  143.    FatSector      : LONGINT;
  144.    FatBits        : BYTE;
  145.    RootSector     : LONGINT;
  146.    DirCluster     : LONGINT;
  147.    NextDirCluster : LONGINT;
  148.    DataSector     : LONGINT;
  149.  
  150.    FAT16          : ARRAY[1..4] of ^FATType16;
  151.    FAT12          : ^FATType12;
  152.  
  153.    LastRootEntry  : WORD;
  154.    LastEntry      : WORD;
  155.    RealEntry      : WORD;
  156.    IsRootLoaded   : BOOLEAN;
  157.    RootDir        : ^DirEntryArray;
  158.    DirData        : ^DirEntryArray;
  159.    NewDosError    : INTEGER;
  160.    ClustLibLoopy  : BYTE;
  161.  
  162. {------------------------------------------------}
  163. { This is a copy of the FDisk 16-byte structure: }
  164. {                                                }
  165. {  Active          == 1 BYTE                     }
  166. {    128 means Active, 0 means Non-Active        }
  167. {                                                }
  168. {  BeginHead       == 1 BYTE                     }
  169. {                                                }
  170. {  BeginSector     == 1 BYTE                     }
  171. {                                                }
  172. {  BeginCylinder   == 1 BYTE                     }
  173. {                                                }
  174. {  FDisk ID        == 1 BYTE                     }
  175. {    1   is a DOS 12-Bit FAT                     }
  176. {    2   is a XENIX partition                    }
  177. {    4   is a DOS 16-Bit FAT                     }
  178. {    5   is a DOS Extended partition             }
  179. {    6   is a DOS Bootable > 32 MB partition     }
  180. {    86  ????                                    }
  181. {    92  SDPS FDisk partition                    }
  182. {    99  Unix partition                          }
  183. {    100 Unused partition                        }
  184. {                                                }
  185. {  EndingHead      == 1 BYTE                     }
  186. {                                                }
  187. {  EndingSector    == 1 BYTE                     }
  188. {                                                }
  189. {  EndingCylinder  == 1 BYTE                     }
  190. {                                                }
  191. {  StartSector     == 4 BYTEs                    }
  192. {                                                }
  193. {  NumberOfSectors == 4 BYTEs                    }
  194. {------------------------------------------------}
  195.  
  196.